home *** CD-ROM | disk | FTP | other *** search
/ BMUG PD-ROM A / PD-ROM A.iso / Programming / Programming Languages / MacOberon / MacOberon (tools) / Mandelbrot.Mod (.txt) < prev    next >
Encoding:
Oberon Text  |  1991-02-14  |  1015 b   |  31 lines  |  [.Ob./.Ob2]

  1. Syntax10.Scn.Fnt
  2. MODULE Mandelbrot; (* gri/mf 15.8.89 *)
  3.     IMPORT
  4.         D:=Display, I:=Input;
  5.     CONST
  6.         N=100; X=653; Y=299;
  7.     TYPE
  8.         COMPLEX=RECORD re, im: REAL END;
  9.     PROCEDURE Iterate(c: COMPLEX; n: INTEGER): INTEGER;
  10.         VAR z, d: COMPLEX; i: INTEGER;
  11.     BEGIN    i:=0; z:=c; d.re:=z.re*z.re; d.im:=z.im*z.im;
  12.         WHILE    (i <= n) &(d.re+d.im <= 4.0)    DO
  13.             z.im:=2*z.re*z.im+c.im; z.re:=d.re-d.im+c.re;
  14.             d.re:=z.re*z.re; d.im:=z.im*z.im;
  15.             INC(i)
  16.         END;
  17.         RETURN i
  18.     END Iterate;
  19.     PROCEDURE Draw*;
  20.         VAR z: COMPLEX; startre, stepre, stepim: REAL; x, y, i: INTEGER;
  21.     BEGIN startre:=-2.1; stepre:=3/(1150-X); stepim:=2.0/Y; z.re:=startre; z.im:=1.05; y:=Y;
  22.         WHILE    y > 2    DO    DEC(y); z.im:=z.im-stepim; x:=X; z.re:=startre;
  23.             WHILE    x < 1150    DO i:=Iterate(z, N);
  24.                 IF    ODD(Iterate(z, N))    THEN    D.Dot(D.white, x, y, D.replace)    ELSE    D.Dot(D.black, x, y, D.replace)    END;
  25.                 INC(x); z.re:=z.re+stepre
  26.             END;
  27.             IF    I.Available() > 0    THEN    RETURN    END
  28.         END
  29.     END Draw;
  30. END Mandelbrot.Draw    <- This is a command!
  31.